package com.zhoug.android.common.utils;

import android.graphics.Paint;
import android.widget.TextView;

/**
 * @Author 35574
 * @Date 2021/7/28
 * @Description
 */
public class TextUtils {
    private static final String TAG = ">>>TextUtils";
    private static final boolean DEBUG = false;
    private static final char CHINESE_UNICODE_START='\u4E00';
    private static final char CHINESE_UNICODE_END='\u9FA5';

    /**
     * 获取到输入的值(默认去掉2端的空格) 为空则返回null
     *
     * @param textView
     * @return
     * @see #getTextOrNull(TextView, boolean)
     */
    public static String getTextOrNull(TextView textView) {
        return getTextOrNull(textView, true);
    }

    /**
     * 获取到输入的值 为空则返回null
     *
     * @param textView
     * @param trim     是否去掉前后空格
     * @return
     */
    public static String getTextOrNull(TextView textView, boolean trim) {
        if (textView == null || textView.getText() == null) return null;
        String s = textView.getText().toString();
        if (trim) {
            s = s.trim();
        }
        if (android.text.TextUtils.isEmpty(s)) {
            return null;
        }
        return s;
    }

    /**
     * 字符串转化成int数据
     * @param text
     * @return
     */
    public static int parseInt(String text,int def) {
        if (StringUtils.isNullOrEmpty(text)) {
            return def;
        }
        try {
            return Integer.parseInt(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return def;
    }

    /**
     * 字符串转化成long数据
     * @param text
     * @return
     */
    public static long parseLong(String text,long def) {
        if (StringUtils.isNullOrEmpty(text)) {
            return def;
        }
        try {
            return Long.parseLong(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return def;
    }

    /**
     * 字符串转化成short数据
     * @param text
     * @return
     */
    public static short parseShort(String text,short def) {
        if (StringUtils.isNullOrEmpty(text)) {
            return def;
        }
        try {
            return Short.parseShort(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return def;
    }
    /**
     * 字符串转化成float数据
     * @param text
     * @return
     */
    public static float parseFloat(String text,float def) {
        if (StringUtils.isNullOrEmpty(text)) {
            return def;
        }
        try {
            return Float.parseFloat(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return def;
    }

    /**
     * 字符串转化成double数据
     * @param text
     * @return
     */
    public static double parseDouble(String text,double def) {
        if (StringUtils.isNullOrEmpty(text)) {
            return def;
        }
        try {
            return Double.parseDouble(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return def;
    }


    /**
     * 给定最大宽度,计算出文字的最佳大小(刚好显示全部文字)
     * @param textSize 默认文字大小
     * @param maxWidth 文字的最大宽度
     * @param text 文本
     * @param paint 画笔
     * @return
     */
    public static float ensureTextSize(float textSize, int maxWidth, String text, Paint paint) {
        if (paint == null) {
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        }
        paint.setTextSize(textSize);
        float textWidth = paint.measureText(text);
        if (textWidth > maxWidth) {
            return ensureTextSizeSmall(textSize, maxWidth, text, paint);
        } else if (textWidth < maxWidth) {
            return ensureTextSizeBigger(textSize, maxWidth, text, paint);
        }
        return textSize;
    }


    /**
     * 测量能够完全显示全部文字时的文字大小
     *
     * @param textSize 默认文字大小
     * @param maxWidth 最大宽度
     * @param text     文字
     * @param paint    画笔
     * @return <=textSize
     */
    private static float ensureTextSizeSmall(float textSize, int maxWidth, String text, Paint paint) {
        if (paint == null) {
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        }
        paint.setTextSize(textSize);
        float textWidth = paint.measureText(text);
        if (textWidth > maxWidth) {
            textSize -= 2;
            return ensureTextSizeSmall(textSize, maxWidth, text, paint);
        }
        if (DEBUG) {
            LogUtils.d(TAG, "ensureTextSizeSmall:textSize="+textSize);
        }
        return textSize;
    }


    /**
     * @param textSize 默认文字大小
     * @param maxWidth 最大宽度
     * @param text     文字
     * @param paint    画笔
     * @return >=textSize
     */
    private static float ensureTextSizeBigger(float textSize, int maxWidth, String text, Paint paint) {
        if (paint == null) {
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        }
        paint.setTextSize(textSize);
        float textWidth = paint.measureText(text);
        if (textWidth < maxWidth) {
            textSize += 2;
            return ensureTextSizeBigger(textSize, maxWidth, text, paint);
        }
        textSize -= 2;
        if (DEBUG) {
            LogUtils.d(TAG, "ensureTextSizeBigger:textSize="+textSize);
        }
        return textSize;
    }

    /**
     * 包含中文
     * @param str
     */
    public  static boolean containsChinese(String str){
        if (str==null||str.isEmpty()) {
            return false;
        }
        for (char c: str.toCharArray()) {
            if (c >= CHINESE_UNICODE_START && c <= CHINESE_UNICODE_END) {
                return true;// 有一个中文字符就返回
            }
        }
        return false;
    }

}
